import { getToken } from '@/common/oauth'
import { Message } from 'element-ui'
import axios from 'axios'
// 一些请求的全局配置,具体见文档http://www.axios-js.com/zh-cn/docs/index.html#axios-get-url-config
// 表示跨域请求时是否需要使用凭证
axios.defaults.withCredentials = false
//如果请求超过timeout时间则会被中断
axios.defaults.timeout = 60000
axios.defaults.headers.post['Content-Type'] = 'application/json'

/**
 * 添加请求头：
 * 'Authorization':Bearer jwt令牌 sessionUtil.getSession(sysConfig.sessionStorageKeys.jwtToken)
 * 'Token': user_token cookieUtil.getCookie(sysConfig.cookieKeys.tokenKey)
 */
axios.interceptors.request.use(
  config => {
    // 设置请求头 Token
    const token = getToken()
    if (token) {
      config.headers['Token'] = token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)


/**
 * 对请求进行拦截，如果返回401，重新登录
 */
axios.interceptors.response.use(
  response => {
    const { data } = response
    // 请求失败：兼容不用resultVo包装的返回值
    if (data.code && data.code !== 0) {

      if (response.data.code == 44444) {
        //令牌刷新失败
      } else if (data.code && data.code !== 40011) { // redis中jwt令牌失效
        Message({
          message: data.message || '系统异常',
          type: 'error'
        })

        return Promise.reject(data)
      }
    }

    // 成功
    return data
  },
  error => {
    const { response } = error

    // 401：登录过期
    if (response && response.status === 401) {
		// 401：登录过期
    } else {
      Message({
        message: error.message,
        type: 'error'
      })
    }

    return Promise.reject(error)
  }
)

export default axios
